Windows環境でSeleniumからHeadless Chromeを動かしてみた
はじめに
DI部のおおたきです。Headless ChromeがWindowsをサポートしたのでWindows上で動かしてみました。
環境
- Windows7
- Google Chrome 62.0.3202.75
- Python 3.6.3
- Pleiades 4.7.1
準備
Pythonはすでにインストールしてある前提で進めたいと思います。まずpipでライブラリをインストールします。
C:\Users\ootaki.kentaro>pip install selenium Collecting selenium Using cached selenium-3.6.0-py2.py3-none-any.whl Installing collected packages: selenium Successfully installed selenium-3.6.0
次にWebDirverをここからダウンロードします。今回使用したドライバのバージョンは2.3.3になります。ダウンロードしたら適当な場所に解凍します。
今回開発はPleiades All in One(Eclipse)で行いました。使用したのはEclipse 4.7 OxygenのWindows64ビット Standard Edtion版のPython になります。
起動したらまず、Pythonのパスを設定します。メニューのウィンドウ > 設定からPyDev > インタープリター >Pythonインタープリターの新規ボタンからインストールしたPythonのパスを追加します。
以上で準備は完了です。
コードを書いてみる
弊社のブログサイトにアクセスして「めそ子」と検索し、検索結果のリンクを取得し最後にスナップショットを取ってみます。
以下今回のソースコードになります。
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.binary_location = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=options, executable_path="D:\\Program\\chromedriver_win32\\chromedriver.exe") #トップ画面を開く。 driver.get('https://dev.classmethod.jp/') #検索メニュークリック driver.find_element_by_xpath("//span[text()='検索']").click() #キーワード入力 driver.find_element_by_id("searchKeywordInput").send_keys("めそ子") #検索ボタンクリック driver.find_element_by_id("searchKeywordInputButton").click() #検索結果の一覧からリンクのタイトルを取得する for a in driver.find_elements_by_css_selector('h2 > a'): print(a.text) # スクリーンショットをとる。 driver.save_screenshot('search_results.png') driver.quit()
5~8行目でwebdriverの設定を行っています。binary_location
はインストールされているChromeのパスを指定します。executable_path
は先ほどダウンロードしたWebDirverのパスを指定します。また--headless
を指定することでブラウザを起動せずheadlessモードで実行されます。
最後にスクリーンショットを取ったファイルは実行したpythonファイルと同階層に作成されます。
実行結果
検索結果のリンクの一覧が以下のように表示されます。
iOSアプリ「Pythonista3」でクラスメソッドのおみくじを占えるようにした iOSアプリ「Pythonista3」でめそ子さんと記念写真を撮れるようにしてみた※追記あり マーケティング部からのお知らせ(めそ子さんの壁紙ほかボリューム多めです):2017年10月2日〜10月6日 [イベントレポート] 俺コン day2 に参加してきました! #orecon_ios #akibaswift パスワードの作成や管理に悩んだときに思い出していただきたいアイデア ERC20準拠の「めそコイン」を発行して一攫千金を狙ってみた [iOS 11] ARKitでソファー設置からあの子の身長測定まで色々やってみた 【めそ子通信】日本各地を飛び回る!Developers.IO WORLD開催します GoogleのJPEGエンコーダーGuetzliを試してみた 同僚の家でリモートしてみた 【めそ子通信】AWSに関するコンサルティングや利用料金が一部無料に! Try!シリーズをご活用ください Ethereumブロックチェーンでめそ子の握手券を作ってみた 【めそ子通信】7月開催セミナーのご案内 〜AWS導入相談会始めました〜 【来場御礼】Developers.IO 2017レポートまとめ #cmdevio2017 クラスメソッド2次元社員 2代目めそ子のコーナー Developers.IO 2017 イベントフォトレポート #cmdevio2017 Google Sheets + Apps Script を使ってめそ子の壁紙を月替りで自動アップデートする #cmdevio2017 めそ子が語るDevelopers.IO 2017の見どころと当日のご案内 EIPで料金発生するパターンとしないパターン #AWS 【好評御礼】DevelopersIO2017の全セッション概要紹介! #cmdevio2017 AWS Summit Tokyo 2017 参加レポート・ツイート・クラメソ的ニュースのまとめ #AWSSummit クラスメソッドにJOINし、名前を襲名しました「めそ子」です 「AWS Summit Tokyo 2017」クラスメソッド展示ブースでお待ちしております クラスメソッドに10年勤務してるワイが魅力と思い出を語ってく【採用/求人】 7/1(土)開催のDevelopers.IO 2017、登録受付中! 【めそ子通信】5月開催セミナーのご案内 〜AWS Summitでお待ちしております〜 【めそ子通信】4月開催セミナーのご案内 〜今年もアレやります〜 Tableau 10.2 新機能:データをCSVとしてエクスポート出来るようになりました #tableau 【めそ子通信】3月開催イベント・セミナーのおしらせだよ!たーのしー! 【新機能】Amazon Rekognitionに年齢解析機能がつきました【めそ子さんって何歳?】
スクリーンショットの画像です。
headlessとそうでない場合の実行速度の違い
headlessオプション指定してブラウザを表示しない場合とオブション指定しないでブラウザを表示した場合の速度を計測してみました。 以下、今回作成したプログラムでの実行結果の違いです。
headlessオプション有 | headlessオプション無 |
---|---|
5秒 | 8秒 |
5秒 | 8秒 |
5秒 | 7秒 |
5秒 | 8秒 |
5秒 | 8秒 |
やはりheadlessで実行したほうが処理速度も速いです。
まとめ
Windows上では簡単に実行することができました。headlessにすることでブラウザが起動しないしのでテストもやりやすいので、ブラウザのシェアが最も高いChromeがheadless対応したのは大きいかなと思います。
またheadlessにすることで処理速度も速くなるのでテストなどでたくさんの処理をさせる場合には時間短縮になると思います。
これを気にテストの一環に取り入れるのもいいのではないかと思います。
今回は以上です。